package com.nextel.project.canje.bean;

import com.nextel.project.canje.bean.CanjeDetalleBean;
import com.nextel.project.pedido.bean.*;
import com.nextel.project.cliente.bean.ClienteBean;
import com.nextel.project.usuario.bean.UsuarioBean;
import pe.com.nextel.rms.DataInputStreamX;
import pe.com.nextel.rms.DataOutputStreamX;
import pe.com.nextel.rms.PersistenteX;
import java.io.IOException;

import org.kxml2.io.KXmlParser;
import org.kxml2.io.KXmlSerializer;
import pe.com.nextel.util.ArrayList;
import pe.com.nextel.util.Fecha;
import pe.com.nextel.util.List;
import pe.com.nextel.util.StringUtils;
import pe.com.nextel.util.math.MathUtil;

/**
 *
 *  
 */
public class CabCanjeBean extends PersistenteX {
    
    private String codigoCliente;
    private List lstDevolucionDetalle;
    private byte estadoPedido;
    private String empresa;
    private String codigoUsuario;
    private String numDocumento;
    private String fecRegistro;

    public int latitud;
    public int longitud;
    private long fechMobil;
    
    public CabCanjeBean(UsuarioBean pusuario, ClienteBean pcliente) {
        codigoUsuario = pusuario.getCodigo();
        codigoCliente = pcliente.getCodigo();
        empresa = pusuario.getCompania();
        setLstCanjeDetalle(new ArrayList());
    }
    
    /**
     * No usar solo en RMS
     */
    public CabCanjeBean() {
//        usuario = new UsuarioBean();
//        cliente = new ClienteBean();
        setLstCanjeDetalle(new ArrayList());
    }
    
    public void persistir(DataOutputStreamX dataOutput, List list) throws IOException {
        //System.out.println("CanjeBean.persistir");
        dataOutput.writeString(StringUtils.stringNullToBlank(getEmpresa()));
        dataOutput.writeString(StringUtils.stringNullToBlank(getCodigoCliente()));
        dataOutput.writeString(StringUtils.stringNullToBlank(getCodigoUsuario()));
        dataOutput.writeString(StringUtils.stringNullToBlank(getNumDocumento()));
        dataOutput.writeString(StringUtils.stringNullToBlank(getFecRegistro()));
        dataOutput.writeInt(latitud);
        dataOutput.writeInt(longitud);
        dataOutput.writeLong(getFechMobil());

        int cant = getLstCanjeDetalle().size();
        dataOutput.writeInt(cant);
        
        if (cant > 0) {
            CanjeDetalleBean canjeDetalle = new CanjeDetalleBean();
            canjeDetalle.persistir(dataOutput, getLstCanjeDetalle());
            canjeDetalle = null;
        }
    }
    
    public List recuperar(DataInputStreamX dataInput) throws IOException {
        
        setEmpresa(dataInput.readString());
        setCodigoCliente(dataInput.readString());
        setCodigoUsuario(dataInput.readString());
        setNumDocumento(dataInput.readString());
        setFecRegistro(dataInput.readString());
        latitud = dataInput.readInt();
        longitud = dataInput.readInt();
        setFechMobil(dataInput.readLong());
        
        int i = dataInput.readInt();
        
        if (i > 0) {
            CanjeDetalleBean canjeDetalle = new CanjeDetalleBean();
            setLstCanjeDetalle(canjeDetalle.recuperar(dataInput));
            canjeDetalle = null;
        }
        
        return null;
    }
    
    public void writeXMLObject(KXmlSerializer writer) throws IOException {
//        System.out.println("CanjeBean.writeXmlObject");

        String[] FechaMobil = Fecha.convertTimeSSLongToString(getFechMobil());
        writer.startTag(null,"p");

        writer.attribute(null,"e",StringUtils.stringNullToBlank(empresa));
        writer.attribute(null,"cc",StringUtils.stringNullToBlank(codigoCliente));
        writer.attribute(null,"cu",StringUtils.stringNullToBlank(codigoUsuario));
        writer.attribute(null,"nd",StringUtils.stringNullToBlank(getNumDocumento()));
        writer.attribute(null,"fr",StringUtils.stringNullToBlank(getFecRegistro()));
        writer.attribute(null,"la",String.valueOf(latitud));
        writer.attribute(null,"lo",String.valueOf(longitud));
        writer.attribute(null,"fm",FechaMobil[0] + ' '+FechaMobil[1]);

        int cant = getLstCanjeDetalle().size();

        for (int i=0;i<cant;i++){
            CanjeDetalleBean elem =  (CanjeDetalleBean)getLstCanjeDetalle().get(i);
            elem.writeXMLObject(writer);
        }
        writer.endTag(null,"p");
    }
    
    public void readXMLObject(KXmlParser parser) throws IOException {

    }
    
    public boolean setDetalleCanje(CanjeDetalleBean bean) {
        if (!existeArticulo(bean)) {
            getLstCanjeDetalle().add(bean);
            return true;
        }
        return false;
    }
    
    public void removeArticulo(String codigo) {//, String motivo
        for (int j = getLstCanjeDetalle().size() - 1; j >= 0; j--) {
            CanjeDetalleBean elem = (CanjeDetalleBean) getLstCanjeDetalle().get(j);
            if (elem.getCodigoArticulo().equals(codigo)){//&&(elem.getCodigoMotivo().equals(motivo))) {
                getLstCanjeDetalle().remove(j);
                break;
            } 
        }
    }
    
    public boolean existeArticulo(CanjeDetalleBean bean) {
        boolean flag = false;
        for (int j = getLstCanjeDetalle().size() - 1; j >= 0; j--) {
            CanjeDetalleBean elem = (CanjeDetalleBean) getLstCanjeDetalle().get(j);
            if ( (elem.getCodigoArticulo().equals(bean.getCodigoArticulo()))&&(elem.getCodigoMotivo().equals(bean.getCodigoMotivo())) ) {
                flag = true;
                break;
            }
        }
        return flag;
    }
    
    public CanjeDetalleBean getDetalleCanje(String codigoArticulo) {
        
        CanjeDetalleBean elem = null;
        for (int j = getLstCanjeDetalle().size() - 1; j >= 0; j--) {
            elem = (CanjeDetalleBean) getLstCanjeDetalle().get(j);
            if (elem.getCodigoArticulo().equals(codigoArticulo)) {
                return elem;
            }
        }
        return null;
    }

    public byte getEstadoPedido() {
        return estadoPedido;
    }
    
    public void setEstadoPedido(byte estadoPedido) {
        this.estadoPedido = estadoPedido;
    }  
    
    public List getLstCanjeDetalle() {
        return lstDevolucionDetalle;
    }
    
    public void setLstCanjeDetalle(List lstCanjeDetalle) {
        this.lstDevolucionDetalle = lstCanjeDetalle;
    }
    
    public void clear() {
        if (lstDevolucionDetalle != null) {
            lstDevolucionDetalle.clear();
            lstDevolucionDetalle = null;
        }
    }
    
    public String getCodigoCliente() {
        return codigoCliente;
    }
    
    public void setCodigoCliente(String codigoCliente) {
        this.codigoCliente = codigoCliente;
    }
    
    public String getEmpresa() {
        return empresa;
    }
    
    public void setEmpresa(String empresa) {
        this.empresa = empresa;
    }
    
    public String getCodigoUsuario() {
        return codigoUsuario;
    }
    
    public void setCodigoUsuario(String codigoUsuario) {
        this.codigoUsuario = codigoUsuario;
    }

    public String getFecRegistro() {
        return fecRegistro;
    }

    public void setFecRegistro(String fecRegistro) {
        this.fecRegistro = fecRegistro;
    }

    public String getNumDocumento() {
        return numDocumento;
    }

    public void setNumDocumento(String numDocumento) {
        this.numDocumento = numDocumento;
    }
 
    public long getFechMobil(){
        return fechMobil;
    }
    
    public void setFechMobil(long fechMobil){
        this.fechMobil = fechMobil;
    }

}
